#include"process.h"

#define SIZE 101 //100个警号+\0
#define STYLE '#'

// v2: 根据进度，动态刷新一次进度条

void FlushProcess(double total, double current)
{
    // 旋转光标
    const char* label = "|/-\\";
    int len = strlen(label);
    static int index = 0;

    char buffer[SIZE];
    memset(buffer, 0, sizeof(buffer));


    double rate = current*100.0/total;
    int num = (int)rate;//打印警号的数量

    // 根据下载的进度，刷新一次进度条
    int i = 0;
    for (; i < num; i++)
        buffer[i] = STYLE;

    printf("[%-100s][%.1lf%%][%c]\r", buffer, rate, label[index++]); //.1:保留一位小数
    fflush(stdout);
    
    index %= len;
    if (num >= 100) printf("\n");

}

// v1: 展示进度条的基本功能

//void process()
//{
//   int rate = 0;
//   char buffer[SIZE];
//
//   // 将buffer数组里的字符全部设置成\0
//   // 以免字符串的\0被覆盖，打印乱码
//   memset(buffer, 0, sizeof(buffer));
//
//   const char* label = "|/-\\";
//   int len = strlen(label);
//
//   while(rate <= 100)
//   {
//       printf("[%-100s][%d%%][%c]\r", buffer, rate, label[rate%len]);
//       fflush(stdout);
//       buffer[rate] = STYLE;
//       rate++;
//       // sleep(1);这里用sleep函数也可以
//       usleep(50000);// 1s = 1000ms = 1000x1000us
//   }
//   printf("\n");
//   // printf("hello world\n");
//}



